/*
 * @Author: 严晗 823841034@qq.com
 * @Date: 2023-10-12 15:59:54
 * @LastEditors: 严晗 823841034@qq.com
 * @LastEditTime: 2023-10-19 16:06:59
 * @FilePath: /yike-admin/Users/yanhan/vite-project/src/router/permission.js
 * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
 */
import { router, addRoutes } from './index'
import { getToken } from '~/composables/auth'
import { toast, showFullLoading, hideFullLoading } from '~/composables/utils'
import store from '~/store'

// 设置参数，判断是否已经获取了用户信息和菜单路由信息
let hasGetInfo = false

// 全局前置路由守卫
router.beforeEach(async (to, from, next) => {
	// 跳转页面之前，执行全局loading
	showFullLoading()

	const token = getToken()

	// 没有登录时，强制跳转到登录页
	if (!token && to.path !== '/login') {
		toast('请先登录', 'error')
		return next({ path: '/login' })
	}

	// 防止重复登录
	if (token && to.path === '/login') {
		toast('请勿重复登录', 'error')
		// 从哪里来就回到哪里去，没有路由就回到首页
		return next({ path: from.path ? from.path : '/' })
	}

	let hasNewRoutes = false
	// 登录后，获取用户信息，并存储在vuex中
	if (token && !hasGetInfo) {
		// 获取用户信息
		await store.dispatch('getUserInfo')
		// 将参数设为 true 之后，防止重复请求 获取用户信息 方法
		hasGetInfo = true
		// 获取侧边菜单路由信息
		let res = await store.dispatch('getMenus')
		hasNewRoutes = addRoutes(res)
	}
	// 通过判断是否是新路由，进行跳转
	hasNewRoutes ? next(to.fullPath) : next()
})

// 全局后置路由守卫
// 页面加载完成后，关闭全局loading
router.afterEach(() => hideFullLoading())
